﻿// JsonTest.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <json/json.h>
#include<fstream>
using namespace std;
using namespace Json;


/*

[
  "luffy", 19, 170,false,
  ["ace", "sabo"],
  {
    "sex": "man",
    "girlfriend": "Hancock"
  }
]

*/

void writeJson() {
    Value root;  
    root.append("luffy");
    root.append(19);
    root.append(170);
    root.append(false);

    Value subarray;
    subarray.append("ace");
    subarray.append("sabo");
    root.append(subarray);

    
    Value obj;
    obj["sex"] = "man";
    obj["girlfriend"] = "Hancock";
    root.append(obj);

#if 1
    //序列化 有格式
    string json = root.toStyledString();
#else
    FastWriter w;
    string json = w.write(root);

#endif
    //写入磁盘文件
    //wirte->ofstream  -->w0
    //read ->ifstream  -->ri
    ofstream ofs("test.json");
    ofs << json;
    ofs.close();
}


void readJson() {
    ifstream ifs("test.json");
    Reader rd;
    Value root;
    //反序列化
    rd.parse(ifs, root);

    if (root.isArray()) {
        for (unsigned i = 0; i < root.size(); i++) {
            Value item = root[i];
            if (item.isInt()) {
                cout << item.asInt() << " ,";
            }
            else if (item.isString()) {
                cout << item.asString() << " ,";
            }
            else if (item.isBool()) {
                cout << item.asBool() << " ,";
            }
            else if (item.isArray()) {
                for (unsigned j = 0; j < item.size(); ++j) {
                    cout << item[j].asString() << " ,";
                }
            }
            else if (item.isObject()) {
                Value::Members keys = item.getMemberNames();

                for (unsigned k = 0; k < keys.size(); ++k) {
                    cout << keys.at(k) << " : " << item[keys[k]]<<" ";
                }
            }
            cout << endl;
        }

    }
    else if (root.isObject()) {

    }
}

int main()
{
    writeJson();
    readJson();
    return 0;
}















// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单

// 入门使用技巧: 
//   1. 使用解决方案资源管理器窗口添加/管理文件
//   2. 使用团队资源管理器窗口连接到源代码管理
//   3. 使用输出窗口查看生成输出和其他消息
//   4. 使用错误列表窗口查看错误
//   5. 转到“项目”>“添加新项”以创建新的代码文件，或转到“项目”>“添加现有项”以将现有代码文件添加到项目
//   6. 将来，若要再次打开此项目，请转到“文件”>“打开”>“项目”并选择 .sln 文件
